package qc.module.iot.protocol;

import java.util.List;

/**
 * 数据帧解析接口
 *
 * @author QuCheng Tech
 * @since 2025/11/5
 */
public interface IFrameParse {
    /**
     * 分解出有效的报文起始和结束位置索引
     *
     * @return void
     * @author QuCheng Tech
     * @since 2025/11/5
     */
    List<IotPacketsSplitResult> split(byte[] packetsBytes);

    /**
     * 解析数据帧
     *
     * @param inputBytes    数据帧报文字节数组，数组起始必须时数据值对应协议的起始符
     * @param parseBodyData 是否解析报文中的正文内容数据，为false时表示只解析数据帧基本结构框架，为true时表示解析解析结构框架和正文内容数据
     * @return qc.module.iot.protocol.IotFrameParseResult
     * @author QuCheng Tech
     * @since 2025/11/5
     */
    IotFrameParseResult parse(byte[] inputBytes, boolean parseBodyData);

    /**
     * 解析数据帧正文内容
     *
     * @param functionBytes  功能码字节数组，长度可以为1或＞1，长度＜1时无效不进行正文内容解析
     * @param functionBytes, bodyBytes 正文内容字节数组
     * @return java.util.List<qc.module.iot.protocol.IotFrameBodyDataItem>
     * @author QuCheng Tech
     * @since 2025/11/13
     */
    List<IotFrameBodyDataItem> parseBodyData(byte[] functionBytes, byte[] bodyBytes);

    /**
     * 生成回复报文
     *
     * @return void
     * @author QuCheng Tech
     * @since 2025/11/5
     */
    /**
     * 生成回复报文，根据传入的报文解析结果判断，如果返回空表示不需要回复
     *
     * @param frameParseResult 收到的报文解析结果
     * @return byte[]
     * @author QuCheng Tech
     * @since 2025/11/8
     */
    byte[] generateReplyFrame(IotFrameParseResult frameParseResult);

    //接口中不可以定义用于实现的静态方法
    //static void splitTest();
}
